package com.hzit.auth.service.impl;

import com.hzit.auth.properties.GitEEProperties;
import com.hzit.auth.service.GitEEService;
import com.hzit.auth.vo.GiteeToken;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

/**
 * 类名：
 * 作者：WF
 * 功能：
 */
@Service
public class GitEEServiceImpl implements GitEEService {

	@Autowired
	private RestTemplate restTemplate;
	@Autowired
	private GitEEProperties properties;

	/**
	 * 功能：
	 * ① 通过code取得access_token的值
	 * ② 通过access_token取得user信息 （当时gitEE注册的用户）
	 */
	@Override
	public Map<String, String> getUserInfo(String code) {
		// 1.1 根据得到的code码，获取access_token值
		String url = "https://gitee.com/oauth/token?grant_type=%s&code=%s&client_id=%s&redirect_uri=%s&client_secret=%s";
		url = String.format(url, properties.getGrant_type(), code, properties.getClient_id(), properties.getRedirect_uri(), properties.getClient_secret());
		System.out.println("url = " + url);

		// url = "https://gitee.com/oauth/token?grant_type=authorization_code&code="+code+"&client_id=3e2291ead4eb3f33d5ea0d040067493bc560460d78774c21a4a7c0b92a8ac542&redirect_uri=http://hzit.com/gitee/callback/success&client_secret=a55d89365c929eb169750eef9cc60ed391f00cc0eed6cf719334f9086a5e6cd8";
		// 1.2 根据code码得到access_token值
		// 1.2.1 查询得到map
		GiteeToken tokenVo = restTemplate.postForObject(url, null, GiteeToken.class);
		// ResponseEntity<GiteeToken> exchange = restTemplate.exchange(url, HttpMethod.POST, null, GiteeToken.class);
		// GiteeToken body1 = exchange.getBody();
		// OkClient / HttpClient
		// GiteeToken tokenVo = exchange.getBody();
		System.out.println("tokenVo = " + tokenVo);
		// 1.2.2 从查询结果中得到accessToken的值
		String accessToken = tokenVo.getAccess_token();

		// 1.3 根据access_token，得到用户信息
		// 1.3.1 得到用户信息对应的url
		String userInfo_uri = properties.getUserInfo_uri();
		userInfo_uri += "?access_token=" + accessToken;
		// 1.3.2 根据上面的用户信息的url发送请求，得到gitEE中当前登录的用户信息
		Map body = restTemplate.getForObject(userInfo_uri, Map.class);

		// 1.4 返回查到的用户信息
		return body;
	}
}
